package com.class04.param2;

import com.class04.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @ClassDescription:
 * @JdkVersion: 17
 * @Author: yxy
 * @Created: 2023/12/4 9:32
 */
@Controller
@RequestMapping("param")
public class ParamController {
    /**
     * 1.直接接受
     * /param/data?name=root&age=18
     * 形参列表，填写对应的名称的参数即可！请求参数名=形参参数名即可！
     * 1.名称相同 2.可以不传递  不报错
     *
     */
    @RequestMapping("data")
    @ResponseBody
    public String data(String name, int age) {
        System.out.println("name = " + name + ", age = " + age);
        return "name = " + name + ", age = " + age;
    }
    /***
     *  2.注解指定
     *  指定任意的请求参数名  要求必须传参  要求不必须传递 给与一个默认值
     *  /param/data1?account=root&page=1
     *  /param/data111?account=root&page=1
     *  account必须传递  page可以不必须传递，如果不传递默认值就是1
     *  @RequestParam->形参列表  指定请求参数名  或者是否必须传递  或者 非必须传递设置
     *  默认值
     *  用法：
     *  @RequestParam(value="指定请求参数名，如果形参名和请求参数名一致，可以省略"
     *  required = false 前端是否必须传递此参数，默认是必须， 不传400异常！
     *  defaultValue = “1” 当非必须传递false，可以设置默认值
     *  )
     */
    @GetMapping(value ={"data1","data111"} )
//    == @RequestMapping(value = "data",method = RequestMethod.GET)
    @ResponseBody
    public String data1(@RequestParam("account") String username,
                        @RequestParam(required = false,defaultValue = "1") int page){
        System.out.println("username = " + username + ", page = " + page);
        return "username = " + username + ", page = " + page;
    }
    /**
     *     3.特殊值
     *     3.1、一名多值  key=1&key=2 直接使用集合接值即可
     *     param/data2?love=eat&love=play&love=drink
     *     不加注解@RequestParam 将love对应的一个字符串直接赋值给集合！ 类型异常！
     *     加了注解，HandlerAdapter就会将集合 add加入对应的字符串
     */
    @RequestMapping(value = "data2",method = RequestMethod.GET)
    @ResponseBody
    public String data2(@RequestParam List<String> love){
        System.out.println("love = " + love);
        return "love = " + love.toString();
    }

    /**
     * 使用实体对象接值 用户注册（用户信息）
     * -> 对应的实体对象  -> 插入  到数据库 表
     * param/data3?name=lisi&age=18 准备一个对应属性和
     * set|get方法的实体类即可！->形参列表声明对象参数即可
     */
    @PostMapping("data3")
//   == @RequestMapping(value = "data3",method = RequestMethod.POST)
    @ResponseBody
    public String data3(User user)  {
        System.out.println("user = " + user);
        return user.toString();
    }


}
